package com.wanjia.estate.pojo.bank.nxbank;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.AccessLevel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * 001303（综合收单_订单状态查询）
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class PayStatus {

    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class PayStatusRequest extends ZhsdCommonRoot<PayStatusRequestService> {

    }

    @Data
    public static class PayStatusRequestService implements Serializable {
        @JSONField(name = "Service_Header")
        private PayStatusRequestServiceHeader serviceHeader;

        @JSONField(name = "Service_Body")
        private PayStatusRequestServiceBody serviceBody;
    }

    /*固定为空*/
    @Data
    public static class PayStatusRequestServiceHeader implements Serializable {


    }


    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class PayStatusRequestServiceBody extends ExtAttributesCommonRequest implements Serializable {
        @JSONField(name = "request")
        private PayStatusRequestBody request;
    }

    @Data
    public static class PayStatusRequestBody implements Serializable {
        /**
         * 商户号
         */
        @JSONField(name = "terminal_unitno")
        private String terminalUnitno;
        /**
         * 商户名称
         */
        @JSONField(name = "terminal_name")
        private String terminalName;
        /**
         * 结算账号
         */
        @JSONField(name = "terminal_acctno")
        private String terminalAcctno;
        /**
         * 密钥
         */
        @JSONField(name = "INM-ENC-DEV-ID")
        private String inmEncDevId;
        /**
         *
         */
        @JSONField(name = "feeflag")
        private String feeflag;
        /**
         *
         */
        @JSONField(name = "discountrate")
        private String discountrate;
        /**
         *
         */
        @JSONField(name = "trans_acc_flag")
        private String transAccFlag;
        /**
         * 接口接入方
         */
        @JSONField(name = "sysFlag")
        private String sysFlag;
        /**
         * Mac 值
         */
        @JSONField(name = "macValue")
        private String macValue;
        /**
         * 算法类型
         */
        @JSONField(name = "keyType")
        private String keyType;
        /**
         * 终端号
         */
        @JSONField(name = "deviceId")
        private String deviceId;
        /**
         * 店员号
         */
        @JSONField(name = "staffId")
        private String staffId;
        /**
         * 接口版本号
         */
        @JSONField(name = "version")
        private String version;
        /**
         * 接入渠道
         */
        @JSONField(name = "apiFlag")
        private String apiFlag;
        /**
         * 交易接口唯一识别码1104。
         */
        @JSONField(name = "transType")
        private String transType;
        /**
         * 综合收单分配的商户号
         */
        @JSONField(name = "mchntCd")
        private String mchntCd;
        /**
         * 商户或终端自行生成的原订单流水号
         */
        @JSONField(name = "traceNo")
        private String traceNo;
        /**
         * 订单号
         */
        @JSONField(name = "outTradeNo")
        private String outTradeNo;
        /**
         * 经度
         */
        @JSONField(name = "longitude")
        private String longitude;
        /**
         * 纬度
         */
        @JSONField(name = "latitude")
        private String latitude;



        /**
         * 交易金额
         * 单位为分
         */
        private String transAmount;
        /**
         * 是否本行二维码标志
         * 是否本行二维码是否本行二维码交易：
         * 1 是0 否
         */
        private String ownerFlag;
        /**
         * 商户端设备类型
         * 终端设备类型，受理方可参考终端注册时的设备类型填写，取值如下：01：自动柜员机（含ATM和CDM）和多媒体自助终端02：传统POS03：mPOS04：智能POS05：II 型固定电话1506：云闪付终端；07：保留使用；08：手机POS；09：刷脸付终端；10：条码支付受理终端；11：条码支付辅助受理终端；12: 行业终端（公交、地铁用于指定行业的终端）；13：MIS 终端；
         */
        @JSONField(name = "device_type")
        private String deviceType;
    }


    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class PayStatusResponse extends ZhsdCommonRoot<PayStatusResponseService> {

    }


    @Data
    public static class PayStatusResponseService implements Serializable {
        @JSONField(name = "Service_Header")
        private PayStatusResponseServiceHeader serviceHeader;

        @JSONField(name = "Service_Body")
        private PayStatusResponseServiceBody serviceBody;
    }

    @Data
    public static class PayStatusResponseServiceHeader implements Serializable {
        @JSONField(name = "service_response")
        private PayStatusServiceHeaderResponse serviceResponse;
    }


    @Data
    public static class PayStatusServiceHeaderResponse implements Serializable {
        private String status;
        private String code;
        private String desc;
    }


    @Data
    @EqualsAndHashCode(callSuper = true)
    public static class PayStatusResponseServiceBody extends ExtAttributesCommonResponse implements Serializable {
        @JSONField(name = "response")
        private PayStatusResponseServiceResponse  response ;
    }


    @Data
    public static class PayStatusResponseServiceResponse implements Serializable {
        /**
         * 返回码
         */
        private String respCode;
        /**
         * 返回信息
         */
        private String respMsg;
        /**
         *
         */
        private PayStatusTransInfo transInfo;
    }


    @Data
    public static class PayStatusTransInfo implements Serializable {
        /**
         * 交易金额
         */
        private String transAmount;
        /**
         * 交易状态
         */
        private String transStatus;
        /**
         * 交易状态描述
         */
        private String transStatusDesc;
        /**
         * 资金类型
         */
        private String fundType;
        /**
         * 商户或终端自行生成的订单流水号
         */
        private String traceNo;
        /**
         * 综合收单生成的订单流水号
         */
        private String outTradeNo;
        /**
         * 交易时间
         */
        private String transDatetime;
        /**
         * 渠道类型
         */
        private String channelType;
        /**
         * 交易类型
         */
        private String transType;
        /**
         * 订单手续费
         */
        private String handlingCharge;
        /**
         * 订单手续费
         */
        private String remark;
        /**
         * 实际交易金额
         */
        private String actualAmount;
    }
}
